沙盒(Sanbox)是一种将未知、不可信的软件隔离执行的安全机制。恶意软件分析沙盒一般用来将不可信软件放在隔离环境中自动地动态执行,然后提取其运行过程中的进程行为、网络行为、文件行为等动态行为,安全研究员可以根据这些行为分析结果对恶意软件进行更深入地分析。为了搭建一个运行恶意样本的隔离环境,近期调研了cuckoo沙箱,实现了host与多guest机的配置,并且可以通过api提交样本自动化运行。
安装参考教程
- 很详细的一篇:https://blog.csdn.net/Bingoooooo_/article/details/94248229
- 总体步骤正确:https://www.jianshu.com/p/ac009f6c2710
安装过程遇到的问题
按照参考1基本就可以完成沙箱的配置,但是中途还是会踩坑,记录一下。
1. 运行cuckoo报错ImportError:lib*.so–cannot open shared object file: No such file or directory
解决方法:
12345678910软链接方式1.1 找到文件find / -name lib**.so (缺失的动态链接库)1.2 建立软链接ln - /path/to/lib**.so /usr/lib1.3 sudo ldconfig
2. 运行cuckoo报错AttributeError: Rules instance has no attribute ‘save’
Please pip uninstall yara. It’s very outdated and we’re using yara-python==3.6.3 instead.
- 解决方法:照着提示做
3. cuckoo配置过程中mongo数据库没有用户
- 解决方法:1234567891011121314在cukcoo_db的数据库里加入用户:db.createUser({user: "admin",pwd: "admin",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})mongo --port 27017 -u "admin" -p "admin" --authenticationDatabase "admin"db.createUser( { user: "tmy", pwd: "pwd", roles: [ { role: "readWrite", db: "cuckoo_db" } ] })mongo --host localhost:27017 -u tmy -p pwd --authenticationDatabase admin
4. pip install MySQL-python报错
- 解决方法:先sudo apt-get install libmysqlclient-dev,然后pip install
5. 最大打开文件数量太小
解决方法:修改最大打开文件数量
sudo echo 1000000 > sudolink 1234567891011121314151617tangmingyu@tangmingyu-QiTianM610-D529:~$ ulimit -n1024tangmingyu@tangmingyu-QiTianM610-D529:~$ cat /proc/sys/fs/nr_open1000000tangmingyu@tangmingyu-QiTianM610-D529:~$ ulimit -n 1000000bash: ulimit: open files: 无法修改 limit 值: 不允许的操作tangmingyu@tangmingyu-QiTianM610-D529:~$ sudo ulimit -n 1000000sudo: ulimit:找不到命令tangmingyu@tangmingyu-QiTianM610-D529:~$ sudo vi /etc/security/limits.conftangmingyu@tangmingyu-QiTianM610-D529:~$ ulimit -n1024tangmingyu@tangmingyu-QiTianM610-D529:~$ sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"tangmingyu@tangmingyu-QiTianM610-D529:~$ ulimit -n500000tangmingyu@tangmingyu-QiTianM610-D529:~$ . venv/bin/activate(venv) tangmingyu@tangmingyu-QiTianM610-D529:~$ ulimit -n500000
6. win7虚拟机之前一直连不上外网
- 解决方法:开启iptables的转发123456root@tangmingyu-QiTianM610-D529:~#iptables -P FORWARD ACCEPTiptables -P FORWARD ACCEPTiptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.2.0/24 -m conntrack --ctstate NEW -j ACCEPTiptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTiptables -A POSTROUTING -t nat -j MASQUERADE
7. 软件提交之后一直是pending状态
- 解决方法:原因是virtual manager的地址写成了virtual box
https://github.com/cuckoosandbox/cuckoo/issues/2346
8.如果系统没启用root账户,由于 tcpdump 的执行需要 root 权限,则需要以下配置:
|
|
9. mongo数据库的验证:db.auth(‘admin’, ‘admin’) 返回1表示成功
10. 验证guest是否成功连接上:
tangmingyu@tangmingyu-QiTianM610-D529:~$ curl 192.168.2.200:8000
{"message": "Cuckoo Agent!", "version": "0.10", "features": ["execpy", "pinning", "logs", "largefile", "unicodepath"]}
11. error fetching configuration file
一定要以管理员身份运行agent
12. 多guest配置
- 解决方法:
主要参考了https://blog.csdn.net/weixin_42651205/article/details/83900436
照着做就可以,注意完全克隆虚拟机,然后改镜像名称和host添加新增虚拟机的配置。
不过我的虚拟机原本设置的是没有密码,复制虚拟机后初始化时突然要输入用户名和密码了,账号:Administrator;密码为空试一下,成功进去了,然后再调用的时候就不用密码了。
沙箱运行情况
运行方式
. venv/bin/activate
一个终端运行cuckoo -d;另一个运行cuckoo web
VIRUSTOTAL获取样本恶意数据库情况:最近不能翻墙,连不上
替代:https://metadefender.opswat.com
有弹窗的情况下就会截图,安装软件的时候会自己点击next,一直到安装好软件并运行。如果卡在某个步骤了,会自动定时退出。
一份完整的报告大概都要90MB,其中所占空间最大的是memory、report也有十几兆
报告中还会给软件打分,但是说仅供参考
Please notice: The scoring system is currently still in development and should be considered an alpha feature.
配置api自动化提交
https://cuckoo.readthedocs.io/en/latest/usage/api/#
直接cuckoo api
(venv) tangmingyu@tangmingyu-QiTianM610-D529:~/venv/bin$ cuckoo api
2019-09-18 21:17:27,179 [werkzeug] INFO: * Running on http://localhost:8090/ (Press CTRL+C to quit)
通过命令行就可以提交样本自动分析了。
然后查看cuckoo.conf中的api_token = bZ0mLmUX2QElehFjI33OOQ
curl -H “Authorization: Bearer bZ0mLmUX2QElehFjI33OOQ” -F file=@/home/tangmingyu/文档/安全沙箱安装/恶意软件样本/test1.exe http://localhost:8090/tasks/create/file
python脚本提交样本:
sudo /usr/bin/mongod -f /etc/mongodb.conf
数据库
mysql存的是提交任务时间 虚拟机配置之类的信息;mongo存储的是软件提交运行之后,产生的那些分析数据。
好用的mong数据库可视化工具adminMongo: